Состав команды:

Ляпина Екатерина, Дмитрий Гайдаржи

Для анализа были взяты следующие данные: https://drive.google.com/file/d/0Bw_qUDxhcJMjdXNpTDhPb3R0alU/view?usp=sharing

library(png)
library(grid)
img <- readPNG('Porco-cofre.png')
grid.raster(img)

Объектом исследования является финансовое состояние предприятия и индикаторы его способности расплатиться по долгам (банкротство) за итоговый период аудита.

Предметом исследования выступают причинно-следственные связи и зависимости экономических показателей, формирующиеся в результате деятельности фирмы.

Цель работы:

Установление структурных связей и закономерностей между элементами исследуемой системы в выбранной предметной области. Последующая интерпретация имеющихся данных, анализ применимости полученных результатов и создание наилучшей модели для дальнейшего прогнозирования подобных данных. В практическом смысле, аналитические модели могут успешно использоваться для решения задач выявления банкротства фирмы, и предупреждения подобных ситуаций.

Задачи:

Прохождение этапов извлечения, очистки и трансформации сырых данных. Использование разных методик и средств машинного обучения: деревьев решений, кластеризации, нейронных сетей

Практическая задача сводится к необходимости выявления, в какой степени какие факторы определяют состоятельность компании и почему.

Описание данных:

В нашем наборе данных 241 наблюдений и 7 переменных. Исходный файл с данными в формате xlxs.

Описание исходных переменных:

  • ID: индекс записи, ее номер (в дальнейшем используется для выделения рандомных проверочных данных).
  • Ликвидность.активов : экономический термин, обозначающий способность активов быть быстро проданными по цене, близкой к рыночной. Показатель изменяется от 0 до 1.
  • Рентабельность.активов : показатель, который характеризует способность руководства компании эффективно использовать ее активы для получения прибыли. Этот коэффициент отражает среднюю доходность, полученную на все источники капитала (собственного и заемного), рассчитывается по формуле: рентабельность активов = чистая прибыль / активы
  • Доходность.активов : чистая прибыль в процентном отношении к активам.
  • Автономность : коэффициент финансовой независимости, характеризует отношение собственного капитала к общей сумме капитала организации. Коэффициент показывает, насколько организация независима от кредиторов. Чем меньше значение коэффициента, тем в большей степени организация зависима от заемных источников финансирование, тем менее устойчивое у нее финансовое положение.
  • Оборачиваемость.активов : финансовый показатель интенсивности использования организацией всей совокупности имеющихся активов. Данный показатель используется наряду с другими показателями для анализа эффективности управления имуществом и обязательствами фирмы.
  • Банкрот (зависимая переменная) : бинарная переменная (1 - да, 0 - нет), обозначает неспособность должника в полном объеме удовлетворить требования кредиторов по денежным обязательствам и (или) исполнить обязанность по уплате обязательных платежей.

Описательная статистика по нашей выбоке:

ID Ликвидность.активов Рентабельность.активов Доходность.активов Автономность Оборачиваемость.активов Банкрот
Length:241 Min. :0.0000000 Min. :-2.166287046 Min. :-1.90622095 Min. :-0.8343557 Min. :0.0000000 Min. :0.0000000
Class :character 1st Qu.:0.4561752 1st Qu.:-0.026998841 1st Qu.:-0.02553210 1st Qu.: 0.0605999 1st Qu.:0.4604741 1st Qu.:0.0000000
Mode :character Median :0.6632629 Median : 0.005027511 Median : 0.00746537 Median : 0.4891942 Median :1.1675120 Median :0.0000000
NA Mean :0.6352046 Mean :-0.029022803 Mean :-0.01923828 Mean : 1.7752093 Mean :1.3797559 Mean :0.2448133
NA 3rd Qu.:0.8114620 3rd Qu.: 0.053472273 3rd Qu.: 0.07152692 3rd Qu.: 1.5592933 3rd Qu.:2.0441796 3rd Qu.:0.0000000
NA Max. :1.0000000 Max. : 0.360381459 Max. : 0.46781346 Max. :21.4220660 Max. :6.3994348 Max. :1.0000000

Диаграммы рассеивания для имеющихся переменных:

Мы решили исключить выбросы из наших данных. После преобразований диаграммы Бокса-Вискера для наших переменных стали такими:

Зависимости Банкротства от Ликвидности активов:

Построим диаграмму Бокса-Вискера для зависимости Банкротства от Рентабельности активов:

Построим диаграмму Бокса-Вискера для зависимость Банкротства от Доходности активов:

Построим диаграмму Бокса-Вискера для зависимости Банкротства от Автономности активов:

Построим диаграмму Бокса-Вискера для зависимости Банкротства от Оборачиваемости активов:

Для проверки полученной модели мы разделили все имеющиеся данные в соотношении 85:15. То есть тренировочными данными мы сделали 211 записей, мы выбрали их случайным образом из нашей выборки так, чтобы подвыборка была репрезентативная нашим данным.

Построим матрицу Пирсона для наших тренировочных данных:

Ликвидность.активов Рентабельность.активов Доходность.активов Автономность Оборачиваемость.активов
Ликвидность.активов
Рентабельность.активов 0.21**
Доходность.активов 0.21** 0.99***
Автономность 0.02 0.16* 0.17*
Оборачиваемость.активов 0.16* 0.29*** 0.33*** 0.03
Банкрот 0.09 -0.15* -0.18* -0.15* -0.09

Построение моделей и прогнозирование:

Построение моделей мы начали с бинарной логистической регрессии. Она наоболее всего подходит в случаях, когда зависимая переменная является дихотомической. Для нахождения коэффициентов логистической регрессии, использовался метод максимального правдоподобия, уже встроенный в пакет языка R.

В процессе исследования оказалось, что Оборачиваемость активов и Автономность мало влияют на Банкротство, эти переменные были исключены из итоговой модели. Полученная регрессия также применялась для прогнозирования.

Мы используем ROC-кривую для представления результатов прогнозирования нашей модели. По сути мы построили функцию, которая считает долю истинно положительных примеров (True Positives Rate) и ложно положительных примеров (False Positives Rate). Мы взяли порог отсечения равным 0.4 для этих тестовых данных.

  • TP (True Positives) – верно классифицированные положительные примеры (так называемые истинно положительные случаи);
  • FP (False Positives) – отрицательные примеры, классифицированные как положительные (ошибка II рода); Это ложное обнаружение, т.к. при отсутствии события ошибочно выносится решение о его присутствии (ложно положительные случаи).

Мы также высчитываем показатель AUC(area under ROC curve) для выявления прогнозной силы нашей модели. Он также будет использоваться в последующем для сравнительного анализа нескольких моделей. В результате построения вышло, что наша модель имеет показатель AUC = 0.84. В литературе иногда приводится следующая экспертная шкала для значений AUC, по которой можно судить о качестве модели:

  • AUC - Качество модели
  • 0.9-1.0 - Отличное
  • 0.8-0.9 - Очень хорошее
  • 0.7-0.8 - Хорошее
  • 0.6-0.7 - Среднее
  • 0.5-0.6 - Неудовлетворительное

В последующем мы построили регрессионное дерево, воспользовавшись алгоритмом CART. Дерево было использовано для дальнейшего прогнозирования и сравнения моделей уже описанными способами.

Построим график зависимости кросс-валидационных ошибок от числа расщеплений и сложности модели. Также выведем итоговое деревого после операции обрезки:

После выявления наилучшей модели мы также провели ROC-анализ:

В результате построения вышло, что наша модель имеет показатель AUC равный 0.89. Мы также воспользовались методом random forests для дальнейшего прогнозирования и сравнения моделей. График количества ошибок от количества использованых в методе random forest деревьев выглядит следующим образом:

После построения мы также провели ROC-анализ:

В результате построения вышло, что наша модель имеет AUC равный 0.78.

Последним регрессионным деревом стало дерево, построенное с использованием алгоритма C.5.0:

В результате построения вышло, что наша модель имеет AUC равный 1. Для полноты конкуренции мы отсроили также нейронную сеть (однослойный персептрон):

В результате построения вышло, что наша модель имеет AUC равный 0.77.

Кластеризация:

Метод K-средних Определим оптимальное количества кластеров методом “плечо”. Данный метод рассматривает изменение диспресии случайной величины. Следует выбрать такое количество кластеров, при котором, добавление очередного кластера не придаст значительных улучшений в моделировании данных. На графике показано, что с каждым добавлением очередного кластера, изменчивость дисперсии уменьшается. В нашем случае “плечо” соответствует количеству кластеров 5. Определив оптимальное количество кластеров, был применен метод k - средних, который разбил данные на 5 кластеров. Результат работы данного алгоритма можно продемонстрировать в виде следующей матрицы: Рассмотрем распределение банкротов полученных кластерах

№ кластера Не банкрот Банкрот Доля в %
1 42 4 8.70
2 35 2 5.41
3 7 7 50.00
4 35 15 30.00
5 39 25 39.06

Исходя из количества банкротов в каждом кластере можно вычислить их долю. Таким образом, определив принадлежность очередной фирмы к одному из рассмотренных кластеров, можно определить шанс её банкротства. Протестируем полученные вероятности на выделенных тестовых данных, которые не использовались при разбиении данных на кластеры:

№ кластера Не банкрот Банкрот Доля в %
1 5 0 0.00
2 7 0 0.00
3 1 0 0.00
4 4 3 42.86
5 7 3 30.00

Из полученных результатов, можно сделать вывод, что полученные вероятности на этапе разбиения исходных данных на кластерах, довольно точно классифицировали тестовые данные. Соотношение фирм банкротов к не банкротам в каждом из кластеров сохранилось.

В качестве дополнительного анализа, можно рассмотреть зависимость показателя банкротства фирмы от каждой независимой переменной. Например для параметра Ликвидность активов, распределение фирм выглядит следующим образом:

Для параметра Рентабельность активов:

Доходность активов:

Автономность:

Оборачиваемость активов:

Наивный классификатор Байеса

Наивный байесовский классификатор — простой вероятностный классификатор, основанный на применении Теоремы Байеса со строгими (наивными) предположениями о независимости.

Достоинством наивного байесовского классификатора является малое количество данных для обучения, необходимых для оценки параметров, требуемых для классификации.

#Наивный классификатор
naivesource <- data.frame(training_data$values)
naivesource$Банкрот <- training_data$Банкрот
classifier<-naiveBayes(as.factor(Банкрот) ~ ., data = naivesource)
predicted = predict(classifier, testing_data$values);
predicted<-as.numeric(as.character(predicted))


#Точность модели
i<-0;
for (j in 1:length(predicted)){
  if (predicted[j] == as.numeric(as.character(testing_data$Банкрот[j]))) {
    i<-i+1;
    }
}
i<-i/length(predicted)*100

Совпадение предсказаний составило 76.6666666667%

Отобразим распределение результатов байесовского классификатора на гистограмме